package com.ruifu.worksheet.service;

import com.fhzncloud.cloud.common.security.service.CloudUser;
import com.ruifu.common.vo.PageResultVO;
import com.ruifu.worksheet.dto.WsCommonRelationSheetDTO;
import com.ruifu.worksheet.dto.WsCommonSheetDTO;
import com.ruifu.worksheet.vo.WsCommonRelationSheetVO;
import com.ruifu.worksheet.vo.WsCommonSheetVO;
import com.ruifu.worksheet.vo.WsCustomizeTypeVO;

import java.math.BigInteger;
import java.util.List;

/**
 * @author yuanyundi
 * @date 2020/04/14
 */
public interface WsCommonSheetService {
    /**
     * 工作单列表查询
     *
     * @param pageNum 当前页面
     * @param pageSize 每页大小
     * @param classFlag 查询类别 0-问题报告单 1-变更申请单 2-变更通知单
     * @param wsCommonSheetVO 工作单通用VO
     * @param cloudUser 登录人员信息
     * @return PageResultVO 查询集合
     */
    PageResultVO findPage(int pageNum, int pageSize,int classFlag, WsCommonSheetVO wsCommonSheetVO, CloudUser cloudUser);

    /**
     * 变更单类型查询
     *
     * @param typeName 工作单类型ID
     * @param classFlag 查询类别 0-问题报告单 1-变更申请单 2-变更通知单 3-作废通知单
     * @param clouse 登录人员信息
     * @return  WsCustomizeTypeVO 变更单类型VO
     */
    WsCustomizeTypeVO findType(String typeName, int classFlag, CloudUser cloudUser);

    /**
     * 工作单新增
     *
     * @param classFlag 查询类别 0-问题报告单 1-变更申请单 2-变更通知单 3-作废通知单
     * @param wsCommonSheetVO 工作单提交数据
     * @param cloudUser 用户登录信息
     */
    void insertEntity(int classFlag,WsCommonSheetVO wsCommonSheetVO,CloudUser cloudUser);

    /**
     * 获取工作单类型下拉集合
     *
     * @param classFlag 查询类别 0-问题报告单 1-变更申请单 2-变更通知单 3-作废通知单
     * @param cloudUser 用户登录人员信息
     * @return String 类型名称拼接字符串，逗号分隔
     */
    String findTypeNamesByClass(int classFlag,CloudUser cloudUser);

    /**
     * 工作单单一查询
     *
     * @param cmId 工作单主键
     * @param classFlag 查询类别 0-问题报告单 1-变更申请单 2-变更通知单 3-作废通知单
     * @param cloudUser 登录人员信息
     * @return WsCommonSheetVO 工作单通用VO
     */
    WsCommonSheetVO findWorkSheetById(BigInteger cmId,int classFlag,CloudUser cloudUser);

    /**
     * 工作单编辑提交
     *
     * @param wsCommonSheetVO 工作单数据实体
     * @param classFlag 类别 0-问题报告单 1-变更申请单 2-变更通知单 3-作废通知单
     * @param cloudUser 登录人员信息
     */
    void updateEntity(WsCommonSheetVO wsCommonSheetVO,int classFlag,CloudUser cloudUser);

    /**
     * 工作单删除
     *
     * @param cmId 工作单主键
     * @param classFlag 类别 0-问题报告单 1-变更申请单 2-变更通知单 3-作废通知单
     */
    void deleteEntity(BigInteger cmId,int classFlag);

    /**
     * 关联变更单新增
     *
     * @param cmId 工作单ID
     * @param wsCommonRelationSheetDTOList 关联变更单集合
     * @param cloudUser 用户登录人员信息
     */
    void saveRelatedSheet(BigInteger cmId, List<WsCommonRelationSheetDTO> wsCommonRelationSheetDTOList,CloudUser cloudUser);

    /**
     * 关联变更单查询
     *
     * @param cmId 工作单主键
     * @param cloudUser 用户登录人员信息
     * @return List<WsCommonRelationSheetVO> 关联变更单数据集合
     */
    List<WsCommonRelationSheetVO> findRelatedSheet(BigInteger cmId,CloudUser cloudUser);

    /**
     * 工作单编号同账套唯一校验
     *
     * @param classFlag 类别 0-问题报告单 1-变更申请单 2-变更通知单 3-作废通知单
     * @param wsCode 工作单编号
     * @param cloudUser 登录人员信息
     * @return int  查询条数
     */
    int checkWsCode(String wsCode,int classFlag,CloudUser cloudUser);

    /**
     * 查询变更单关联的流程ID
     *
     * @param cmId 工作单ID
     * @param classFlag 类别 0-问题报告单 1-变更申请单 2-变更通知单 3-作废通知单
     * @param String 工作流模板ID
     */
    String selectFlowIdByWsId(BigInteger cmId,int classFlag);

    /**
     * 修改工作单状态
     *
     * @param cmId 工作单ID
     * @param classFlag 类别 0-问题报告单 1-变更申请单 2-变更通知单 3-作废通知单
     * @param statusVal 状态值
     */
    void updateStatusById(BigInteger cmId,int classFlag,String statusVal);

    /**
     * 查询问题对象ID集合
     *
     * @parame cmId 工作单ID
     * @param classFlag 类别 0-问题报告单 1-变更申请单 2-变更通知单 3-作废通知单
     * @return String 问题对象IDS
     */
    String findAttAchFileIDS(BigInteger cmID,int classFlag);

    /**
     * 同步修改问题对象状态
     *
     * @param cmId 工作单ID
     * @classFlag 类别 0-问题报告单 1-变更申请单 2-变更通知单 3-作废通知单
     */
    void updateAttachFileStatus(BigInteger cmId,int classFlag);

    /**
     * 账套号数据同步
     *
     * @param sourceSetId  源
     * @param targetSetId  目标
     * @classFlag 类别 0-问题报告单 1-变更申请单 2-变更通知单 3-作废通知单
     */
    void copyWsCommonSheetList(Long sourceSetId,Long targetSetId,int classFlag);
}
